package com.jpxx.netty.helloAandB;


import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerAdapter;
import io.netty.channel.ChannelHandlerContext;

 

  
public class ServerHandler extends ChannelHandlerAdapter{  

		//数据怎么从管道读出来，怎么做处理，在这里
		//ChannelHandlerContext整个通道的上下文，类似spring的applicationContext
		@Override  
	    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {  
			//msg默认就是比buffer类型，可以直接强转
			//ByteBuf不是 java.nio.ByteBuffer，netty封装的操作起来更简单
			ByteBuf buf = (ByteBuf)msg;
			byte[] req = new byte[buf.readableBytes()];//可读的字节数
			buf.readBytes(req);//把缓冲里的数据 去读到上面新创建的字节数组里面
			
			//输出从客户端拿到的数据，转成utf-8 打印
			String body = new String(req,"utf-8");
			System.out.println("Server服务端:"+body);
			
			//服务器端给客户端的回复 响应
			String response = "你好客户端。。。。我是server";
		
			//只要有写操作   自动帮我释放引用计数器对象  不需要ReferenceCountUtil.release(msg);
			ctx.writeAndFlush(Unpooled.copiedBuffer(response.getBytes()));
			//加上下面这段代码，服务端接受一次客户端的连接就会自动跟客户端断开
			//.addListeners(ChannelFutureListener.CLOSE)
	    }  
	      
		//抛异常的时候，怎么处理 在这里
	    @Override  
	    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {  
	        cause.printStackTrace();  
	        ctx.close();  
	    } 
 
	
    
} 